package mybox.engine.servo;

import mybox.engine.Circle;
import mybox.engine.Figur;
import mybox.engine.File4Qcad;
import mybox.engine.QVector;
import mybox.engine.Schachtel;
import mybox.engine.SchachtelExt;

public class ServoRudder implements Figur {
	
	File4Qcad file4qcad;
	double laserBreite;
	
	double[] dist2m0 = new double[4];
	double befestLochDm;
	double befestLochRadius;
	double m0;
	double mm0;
	double s0;
	public double length;
	public double extraMargin;
	
	QVector center;
	
	Schachtel gegenBox;
	SchachtelExt gegenBoxExt;
	public QVector gegenBoxAchse;
	ServoKorpus korpus;
	ServoKorpusOO korpusOO;
	
	public QVector gegenBoxGegenAchse;
	public Circle  gegenAufhaengung;
	double gegenAchseRadius;
	
	public ServoRudder(File4Qcad file4qcad, String type, double laserBreite) {
		
		this.file4qcad=file4qcad;
		this.laserBreite=laserBreite;
		
		if (type.equalsIgnoreCase(Servo.S3111))
		//Abstaende der rudderBefestigungsloecher zum InnenSetzkreis-Rand
		dist2m0[0]=9.0; 
		dist2m0[1]=8.55;
		dist2m0[2]=9.0;
		dist2m0[3]=8.55;
		
		/** Abhängig von der Größe der Befestigungschrauben
		muss bei Rudder mit entsprechendem Bohrer (hier 2mm) 
		aufgebohrt werden */
		befestLochDm=2;		
		befestLochRadius=befestLochDm/2;
		
		
		//RudderInnenkreisdurchmesser
		m0=6.05;
		//RudderAussenkreisdurchmesser
		mm0=7.45;
		//Kopfdurchmesser der Befestigungsschraube
		s0=5;
		
		length=12.0+m0/2; //Die 13.55 werden vom Innenkreis gemessen
		
		extraMargin=2;
		
		gegenAchseRadius=2.45-2*laserBreite;
		
	}
	
	public void positionIntoGegenBox(Schachtel gegenBox, ServoKorpus korpus) {
		this.korpus=korpus;
		this.gegenBox=gegenBox;
		gegenBoxAchse = new QVector(
	    		 gegenBox.grundPlatte2.ecke[1].x+
	    		 korpus.diagSpace+korpus.diagFromRudderCenter,    		    		 
	    		 gegenBox.grundPlatte2.ecke[1].y+gegenBox.grundPlatte2.breite/2);
		
		gegenBoxGegenAchse = 
		     new QVector(
		    		 gegenBox.grundPlatte1.ecke[1].x+
		    		 korpus.diagSpace+korpus.diagFromRudderCenter,    		    		 
		    		 gegenBox.grundPlatte1.ecke[1].y+gegenBox.grundPlatte1.breite/2);
	    gegenAufhaengung = new Circle(file4qcad,gegenBoxGegenAchse,gegenAchseRadius);
		
				
	}
	
	public void positionIntoGegenBoxExt(SchachtelExt gegenBox, ServoKorpusOO korpus) {
		this.korpusOO=korpus;
		this.gegenBoxExt=gegenBox;
		gegenBoxAchse = new QVector(
	    		 gegenBox.platteOODP.randlinie[0].endPos.x+
	    		 korpus.diagSpace+korpus.diagFromRudderCenter,    		    		 
	    		 gegenBox.platteOODP.ecke[1].y+gegenBox.platteOODP.breite/2);
		
		gegenBoxGegenAchse = 
		     new QVector(
		    		 gegenBox.platteOOGP.randlinie[0].endPos.x+
		    		 korpus.diagSpace+korpus.diagFromRudderCenter,    		    		 
		    		 gegenBox.platteOOGP.ecke[1].y+gegenBox.platteOOGP.breite/2);
	    gegenAufhaengung = new Circle(file4qcad,gegenBoxGegenAchse,gegenAchseRadius);
		
				
	}
	
	
	
	public void draw() {
		 	
   	new Circle(file4qcad,gegenBoxAchse,mm0/2).draw();
   	//Zum Nachmessen im CAD-File
   	new Circle(file4qcad,gegenBoxAchse,m0/2).draw();
   	  
		//RudderInnenkreisdurchmesser
		//m0=6.05;
   	    		
   	new Circle(file4qcad, new QVector(gegenBoxAchse.x+(dist2m0[0]+m0/2+befestLochRadius),gegenBoxAchse.y),befestLochRadius).draw();
   	new Circle(file4qcad, new QVector(gegenBoxAchse.x-(dist2m0[2]+m0/2+befestLochRadius),gegenBoxAchse.y),befestLochRadius).draw();
   	
   	new Circle(file4qcad, new QVector(gegenBoxAchse.x,gegenBoxAchse.y+(dist2m0[1]+m0/2+befestLochRadius)),befestLochRadius).draw();
   	new Circle(file4qcad, new QVector(gegenBoxAchse.x,gegenBoxAchse.y-(dist2m0[3]+m0/2+befestLochRadius)),befestLochRadius).draw();
   	
   	gegenAufhaengung.draw();
   		
	}

}
